/**
 * SVG 图标工具函数
 * 提供获取图标名称列表和加载图标内容的功能
 */

/**
 * 获取所有 SVG 图标的名称列表
 * @returns SVG 图标名称数组
 */
export function getSvgIcons() {
    // 使用 Vite 的 import.meta.glob 获取匹配的 SVG 文件路径对象
    const svgIcons = import.meta.glob("@/assets/icons/*.svg");

    // 提取路径中的文件名，移除后缀，过滤空值
    const keys = Object.keys(svgIcons)
        .map((item) => {
            const fileName = item.split("/").pop(); // 使用 pop() 替代 at(-1) 提高兼容性
            return fileName ? fileName.replace(".svg", "") : "";
        })
        .filter(Boolean); // 去除 null、undefined 或空字符串

    return keys;
}

/**
 * 异步加载所有 SVG 图标内容
 * @returns 包含所有 SVG 图标内容的对象，键为图标名称，值为 SVG 内容
 */
export async function loadSvgList() {
    // 动态导入所有 svg 文件，返回的是懒加载的函数
    const modules = import.meta.glob("@/assets/icons/*.svg", { query: "?raw", import: "default" });

    const svgMap = {};

    // 并行加载所有 SVG 文件
    const loadPromises = Object.entries(modules).map(async ([path, loadModule]) => {
        const nameMatch = path.match(/\/([^/]+)\.svg$/);
        if (!nameMatch) return;

        const name = nameMatch[1];
        try {
            const content = await loadModule();
            svgMap[name] = content;
        } catch (error) {
            console.error(`加载 SVG 图标失败: ${name}`, error);
        }
    });

    // 等待所有 SVG 加载完成
    await Promise.all(loadPromises);

    return svgMap;
}

/**
 * 加载单个 SVG 图标内容
 * @param iconName 图标名称
 * @returns SVG 图标内容
 */
export async function loadSvg(iconName) {
    try {
        const module = await import(`@/assets/icons/${iconName}.svg?raw`);
        return module.default;
    } catch (error) {
        console.error(`加载 SVG 图标失败: ${iconName}`, error);
        return null;
    }
}